package com.bridgeintelligent.tag.customer.mapper;


import com.bridgeintelligent.tag.customer.model.CustomerModel;
import com.bridgeintelligent.tag.customer.model.CustomersStopQueryModel;
import com.bridgeintelligent.tag.customer.model.IndexInfoModel;
import com.bridgeintelligent.tag.customer.pojo.Channel;
import com.bridgeintelligent.tag.customer.pojo.Customers;
import com.bridgeintelligent.tag.customer.pojo.ExportSet;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;


/**
 * 客群持久层
 */
@Mapper
public interface CustomersMapper {


    /**
     * 校验客群名是否重复
     *
     * @param customersName
     * @return
     */
    int checkCustomersName(String customersName);

    /**
     * 根据客群id查找客群名称
     *
     * @param customersId
     * @return
     */
    String findCustomersNameById(String customersId);

    /**
     * 分页条件查询客群列表
     *
     * @param map
     * @return
     */
    List<Customers> findList(Map<String, String> map);

    /**
     * 超管-分页条件查询客群列表
     *
     * @param map
     * @return
     */
    List<Customers> findUnionAdminList(Map<String, String> map);


    /**
     * 分页条件查询客群列表
     *
     * @param map
     * @return
     */
    List<Customers> findSharedList(Map<String, String> map);

    /**
     * 分页条件查询客群列表
     *
     * @param map
     * @return
     */
    List<Customers> findPrivateList(Map<String, String> map);

    /**
     * 获取渠道列表
     *
     * @return
     */
    List<Channel> findAllChannel();

    /**
     * 设置客群与渠道的关联关系
     *
     * @param map
     */
    void setCustomersAndChannel(Map<String, String> map);

    /**
     * 删除客群与渠道的关联关系
     *
     * @param customersId
     */
    void delCustomersAndChannel(String customersId);

    /**
     * 新增客群
     *
     * @param customers
     */
    void addCustomers(Customers customers);


    /**
     * 修改客群
     *
     * @param customers
     */
    int updateCustomers(Customers customers);

    /**
     * 查询单个客群信息
     *
     * @param customersId
     * @return
     */
    Customers findOneById(String customersId);

    /**
     * 根据客群id查询渠道
     *
     * @param customersId
     * @return
     */
    List<String> findChannelByCustomersId(String customersId);

    /**
     * 查询我的客群列表
     *
     * @param map
     * @return
     */
    List<Customers> findMyList(Map map);

    /**
     * 删除客群
     *
     * @param customersId
     */
    void delCustomers(String customersId);

    /**
     * 逻辑删除
     * @param customersId
     */
    void delUptCustomers(String customersId);

    /**
     * 获取所有客群id
     *
     * @return
     */
    List<String> findAllCustomerId();

    /**
     * 查询标签是否有效
     *
     * @param newTime
     * @param dimId
     * @return
     */
    int findDimStatus(@Param("newTime") String newTime, @Param("dimId") String dimId);

    /**
     * 设置客群为无效
     *
     * @param customersId
     */
    void updateCustomersStatus(@Param("customersId") String customersId, @Param("status") String status);


    /**
     * 根据dimId查找客群Ids
     *
     * @param dimId
     * @return
     */
    List<String> findCustomersIdsByDimId(String dimId);

    /**
     * 查询客群的审批列表
     * @param map
     * @return
     */
    List<ExportSet> findCusApproveList(Map<String, String> map);

    /**
     * 查询某个流程的当前审批状态
     * @param map
     * @return
     */
    Customers findCusApproveOne(Map<String, String> map);

    /**
     * 保存导出设置
     * @param exportSet
     */
    void addExportSet(ExportSet exportSet);

    /**
     * 根据userId查询名称
     * @param userId
     * @return
     */
    String getName1(String userId);

    /**
     * 查询某个人具体一次的导出设置信息
     * @param map
     * @return
     */
    ExportSet findCustomerSet(Map<String, String> map);

    /**
     * 根据ID查询详情
     * @param id
     * @return
     */
    ExportSet findExportById(String id);

    /**
     * 查询某个人所有导出申请的记录
     * @param map
     * @return
     */
    List<ExportSet> findNewData(Map<String, String> map);

    /**
     * 通过标签ID查询标签名称
     * @param dimId
     * @return
     */
    String findNameByDimId(String dimId);

    /**
     * 修改数据准备状态
     * @param map
     */
    void updateReadyFile(Map<String, String> map);

    /**
     * 某个用户查询历史导出记录
     * @param map
     * @return
     */
    List<ExportSet> findRecordList(Map<String, String> map);

    /**
     * 修改时间类型
     * @param map
     */
    void updateCustTimeType(Map<String, String> map);

    /**
     * 根据ID查询一条实体
     * @param id
     * @return
     */
    ExportSet findById(String id);

    /**
     * 根据ESS审批流程ID查询实体
     * @param ccisReqNo
     * @return
     */
    ExportSet findByReqNo(String ccisReqNo);

    /**
     * 发布客群审批列表
     * @param map
     * @return
     */
    List<Customers> findReleaseApproveList(Map<String, String> map);

    /**
     * 统计不是标识标签的标签数量
     * @param dimIds
     * @return
     */
    int countNotFreeDim(@Param("dimIds") List<String> dimIds);

    /**
     * 检查导出名称是否重复
     * @param exportName
     * @return
     */
    int checkExportName(String exportName);

    /**
     * 发布和关联种子客群的客群
     * @return
     */
    @Select("select customers_id from tag_customers " +
            "where (date_type = 'false' or (date_type = 'true' and is_mark = '1'))" +
            "and APPROVAL_STATUS = '4' and d_status = '01' and IS_DEL = '00'")
    List<Customers> findDeployOrSeedCustomers();

    /**
     * 客群共享
     * @return
     */
    int shareUpdate(Customers customers);

    /**
     * 共享状态
     * @param customersId
     * @return
     */
    @Select("select shared_State from tag_customers where customers_id = #{customersId}")
    String findSharedState(@Param("customersId") String customersId);

    List<Customers> findByDimId(CustomersStopQueryModel model);

    void stopByDimId(String dimId, String date);

    void deleteByDimId(String dimId, String date);

    List<Customers> findDeploysByDimId(String dimId);

    List<Customers> findUnDeploysByDimId(String dimId);

    Integer checkStop( @Param("dimId") String dimId);

    /**
     * 根据ID修改数据
     * @param map
     */
    void updateById(Map<String, String> map);

    /**
     * 根据客群ID查询客群所属索引ID
     * @param customerId
     * @return
     */
    String findIndexById(@Param("customerId")String customerId);

    /**
     * 查询所有索引信息
     * @return
     */
    List<IndexInfoModel> findAllIndex();

    /**
     * 普通人员查看某个索引下的客群列表
     * @param userId
     * @param indexId
     * @return
     */
    List<CustomerModel> indexCommonList(@Param("userId")String userId, @Param("indexId")String indexId,@Param("customersName")String customersName);

    /**
     * 超管查看某个索引下的客群列表
     * @param indexId
     * @return
     */
    List<CustomerModel> indexAdminList(@Param("indexId")String indexId,@Param("customersName")String customersName);

    /**
     * 校验客群的状态是否可用
     * @param customerId
     * @return
     */
    String checkDataById(@Param("customerId")String customerId);

    String findTime(@Param("indexId")String indexId,@Param("symbol")String symbol);
    String findTime0(@Param("indexId")String indexId);

    List<String> findFailTask(@Param("statuss")List<String> statuss);

    @Select("select flag from TAG_STATIC_WORK_FLAG")
    String findFlag();

    @Update("update TAG_STATIC_WORK_FLAG set flag = #{flag}")
    String updFlag(@Param("flag")String flag);
}